package com.example.admin.androidtest.innerclass;

/**
 * Created by admin on 2017/12/21.
 */

public class Goods {
    //成员内部类
    private class Content implements Contents {
        private int i = 11;

        public int value() {
            return i;
        }
    }

    //成员内部类
    protected class GDestination implements Destination {
        private String label;

        //普通内部类里不能有static成员，包括套嵌类：

        //内部类相当于外部类的一个“成员”的地位，成员的静态字段何以自处？
        //static int age ;错误：成员内部类中不能存在任何static的变量和方法和内部类
        /*static class Content implements Contents {

            @Override
            public int value() {
                return 0;
            }
        }*/
        private GDestination(String whereTo) {
            label = whereTo;
        }

        public String readLabel() {
            return label;
        }


    }

    public Destination dest(String s) {
        return new GDestination(s);
    }

    public Contents cont() {
        return new Content();
    }

    public Destination dest_(String s) {
        //局部内部类
        class GDestination implements Destination {
            private String label;

            private GDestination(String whereTo) {
                label = whereTo;
            }

            public String readLabel() {
                return label;
            }
        }
        return new GDestination(s);
    }

    //局部内部类
    private void internalTracking(boolean b) {
        if (b) {
            class TrackingSlip {
                private String id;

                TrackingSlip(String s) {
                    id = s;
                }

                String getSlip() {
                    return id;
                }
            }
            TrackingSlip ts = new TrackingSlip("slip");
            String s = ts.getSlip();
        }
    }

    //匿名内部类
    public Contents cont(final int count) {//方法的形参需要被匿名内部类使用，那么这个形参就必须为final
        return new Contents() {
            private int i = 11;

            public int value() {
                return i + count;
            }
        };
    }

    //静态内部类（嵌套类）
    protected static class GDestination_ implements Destination {
        private String label;
        private static String name;

        //static int age ;成员内部类中不能存在任何static的变量和方法

        private GDestination_(String whereTo) {
            label = whereTo;
        }

        public String readLabel() {
            return label;
        }
    }

    public static void main(String[] args) {
        Goods p = new Goods();
        Contents c = p.cont();
        Destination d = p.dest("Beijing");
    }
    abstract  class Abstract{
        abstract void abstractMethod();
    }
}
